import fs from 'fs/promises';
import { exec } from 'child_process'; // 用来执行 git 命令
import { fileURLToPath } from 'url';
import path from 'path';

// 路径设置
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const parentDir = path.dirname(__dirname);

const targetFolder = `${parentDir}/tap_data`; // 本地目标文件夹

let isUpdating = false; // 是否正在更新文件的标志

// exec promisify 封装
const execPromise = (command, options = {}) => {
  return new Promise((resolve, reject) => {
    exec(command, options, (error, stdout, stderr) => {
      if (error) {
        reject(`Error: ${error.message}\n${stderr}`);
      } else {
        resolve(stdout);
      }
    });
  });
};

// 更新本地文件的逻辑
export const updateFiles = async () => {
  console.log('[更新器] 正在更新 xiaoxi-wechat-bot 文件夹中的文件...');
  isUpdating = true; // 标记为正在更新

  const xiaoxiFolder = path.join(targetFolder, 'xiaoxi-wechat-bot'); // 新的子文件夹路径

  try {
    // 确保目标文件夹存在，如果不存在则创建它
    await fs.mkdir(xiaoxiFolder, { recursive: true });

    // 进入目标文件夹，确保初始化 git 仓库
    const gitDir = path.join(xiaoxiFolder, '.git');

    await execPromise('git init', { cwd: xiaoxiFolder });

    console.log('[更新器] git 仓库已初始化');

    // 开启 sparse-checkout
    await execPromise('git sparse-checkout init --cone', { cwd: xiaoxiFolder });
    console.log('[更新器] sparse-checkout 初始化成功');

    // 拉取最新的文件
    await execPromise('git pull https://gitee.com/clean-mabu/xiaoxi-wechat-bot.git master', { cwd: xiaoxiFolder });
    console.log('[更新器] 更新完成');

    console.log('[更新器] 文件更新完成。');
  } catch (error) {
    console.error('[更新器] 更新文件时出错:', error);
  } finally {
    isUpdating = false; // 更新完成，解除标记
  }
};

export const isUpdatingFiles = () => isUpdating;
